#ifndef MASSAGE_CFG_H_
#define MASSAGE_CFG_H_

#include <stdint.h>

/**************************************** MASSAGE_CFG ****************************************/
/**
 * @brief:  马达调度处理专用办法
 *          适用于公司HX01或HX03系列的马达调度处理方案
 */

/**************************************** 基础配置，可根据项目需求进行更改 ****************************************/
/**
 * @brief:  马达组数设置
 */
#define MSG_DEV_NUM             		2

/**
 * @brief:  马达组别
 *          若不够可视项目要求
 */
#define MSG_DEV1                		0x00
#define MSG_DEV2                		0x01

/**
 * @brief:  马达状态检测开关
 *          可根据马达所对应的电阻是否安装进行判断（R1 -> M1,...,R6 -> M6,以此类推）
 */
#define MSG_STATUS_CHECK				1

/**
 * @brief:  模式自动切换时间
 *          默认60s（1000等于1s）
 */
#define AUTO_SW_MODE_TIME       		60000

/**
 * @brief:  马达自动停止开关
 */
#define MSG_AUTO_STOP                   0

/**
 * @brief:  马达最长工作时间
 *          时间到马达停止工作（当前默认为30分钟）
 */
#define MSG_WORK_TIME					30

/**
 * @brief:  模式数量设置
 */
#define MSG_MODE_NUM           			8

/**
 * @brief:  马达默认强度设置
 *          当项目要求不需要强度变化控制时，可通过测试来对此处进行默认强度的调整（当前设置适合12V马达，用于29V马达时需注意测试并调整）
 */
#define MSG_DEFAULT_STRE				3

/**
 * @brief:  马达振动周期，可设置，该数值越大，频率越小（当前周期为28 * 0.25 = 7毫秒，当前频率为1000 / (28 * 0.25) = 142.8（次/秒），即一秒振动约143次）
 *          上述计算频率的公式中0.25的由来是将Msg_Int_Process放入到时基为250us的定时器中断中，可根据实际项目需要设置
 */
#define MSG_VIBRATION_PERIOD			28

/**
 * @brief:  马达模式设置,请按照实际项目进行设置
 *          MASSAGE_MODE_CONFIG == 1    马达所有部位都使用
 *          MASSAGE_MODE_CONFIG == 2    马达缺少脚部位
 *          MASSAGE_MODE_CONFIG == 3    马达缺少腿部位
 *          MASSAGE_MODE_CONFIG == 4    马达缺少臀部位
 *          MASSAGE_MODE_CONFIG == 5    马达缺少腰部位
 *          MASSAGE_MODE_CONFIG == 6    马达缺少背部位
 *          MASSAGE_MODE_CONFIG == 7    马达缺少头部位
 *          MASSAGE_MODE_CONFIG == 8    马达缺少腿和脚部位
 *          MASSAGE_MODE_CONFIG == 9    马达缺少头和脚部位
 *          MASSAGE_MODE_CONFIG == 10   马达缺少头和腿部位
 *          MASSAGE_MODE_CONFIG == 11   马达缺少头和腰部位
 */
#define MASSAGE_MODE_CONFIG             1

/**
 * @brief:  马达过流检测开关
 *          该功能当前仅适用于HC32F030系列芯片，请谨慎开启!
 *          该功能使用到HC32F030系列芯片的模拟比较器功能，在裸机情况下，初始化该功能时，需要将中断优先级设置为最高!
 *          否则进行过流检测时无法及时响应中断，将会导致短路电流烧穿板子！
 *          特别注意：
 *          1.当前的马达短路保护功能适配的IC为HC32F030，HC32F030是以ARM Cortex-M0+为内核的MCU，由于该内核缺少了寄存器basepri，所以在跑RTOS任务时，
 *          对RTOS代码中进入临界段之前是将所有中断除能!所以在跑RTOS任务时，应该减少或者禁止在应用程序中进行代码临界段的处理！
 *          2.若在使用到以ARM Cortex-M3/4为内核（一切有寄存器basepri（或者功能类似的寄存器）的内核中）的MCU跑RTOS任务时，不仅需要将模拟比较器的中
 *          断优先级设置为最高，并且受RTOS管理的中断最高优先级必须低于模拟比较器的优先级！！！
 *          3.否则在RTOS进行临界段代码处理的时候无法及时响应中断，将导致短路电流烧穿板子！！！
 */
#define MSG_OVER_CURRENT_DETECTION		0
/**************************************** 基础配置，可根据项目需求进行更改 ****************************************/

/**************************************** 专用配置，当前方案需要采用，请根据项目需求进行配置 ****************************************/
/**
 * @brief:  马达强度设置控制开关
 *          可根据项目需求打开或关闭（该设置目前为HX01项目中独有,如果没使用，关掉该功能即可，下同）
 */
#define MSG_STRE_CONTROL                0

/**
 * @brief:  模式2可调速设置
 */
#define MSG_MODE2_ADJUSTABLE_SPEED		1

/**
 * @brief:  模式10可调节强度变化设置
 */
#define MSG_MODE10_ADJUSTABLE_STRE		0

/**
 * @brief:  马达部位指示灯控制开关
 *          可根据项目需求打开或关闭
 */
#define MSG_POS_LED						0

/**
 * @brief:  马达头部使能控制开关
 */
#define MSG_HEAD_CONTROL				0

/**
 * @brief:  马达点动使能控制开关
 */
#define MSG_POINT_CONTROL				1

/**
 * @brief:  马达点动循环控制开关
 */
#define MSG_POINT_LOOP				    0

#if MSG_STRE_CONTROL
/**
 * @brief:  强度档数设置
 */
#define MSG_STRE_NUM            		10
#endif
/**************************************** 专用配置，当前方案需要采用，请根据项目需求进行配置 ****************************************/

/**************************************** 进阶配置，一般情况下保持默认配置即可 ****************************************/
/**
 * @brief:  若开启过流检测功能，需对以下参数进行设置，一般情况下保持默认值即可!
 */
#if MSG_OVER_CURRENT_DETECTION
/**
 * @brief:  HC32F030系列模拟比较器头文件
 *          当需要开启马达过流检测功能时，该头文件必须调用
 */
#include "vc.h"

/**
 * @brief:  芯片电压为5V时，过流检测阈值设置开关
 *          不可以与MSG_OC_VALUE_FOR_3V3同时开启
 */
#define MSG_OC_VALUE_FOR_5V             1

/**
 * @brief:  芯片电压为3.3V时，过流检测阈值设置开关
 *          不可以与MSG_OC_VALUE_FOR_5V同时开启
 */
#define MSG_OC_VALUE_FOR_3V3            0

/**
 * @brief:  马达过流检测次数
 */
#define MSG_OVER_CURRENT_CHECK_CNT      10

/**
 * @brief:  马达过流检测时间
 */
#define MSG_OVER_CURRENT_CHECK_TIME     50

/**
 * @brief:  马达进行过流检测进行阈值设置的底层函数变量调用
 *          若开启过流检测功能，则此函数必须设置
 */
#define msg_vc_dac_config_t             stc_vc_dac_config_t             

/**
 * @brief:  马达进行过流检测进行阈值设置的底层函数调用
 *          若开启过流检测功能，则此函数必须设置
 */
#define Msg_Set_Div_Value               Vc_DACInit

/**
 * @brief:  当芯片电压为5V时，需对以下参数进行设置，一般情况下保持默认值即可!
 */
#if MSG_OC_VALUE_FOR_5V
/**
 * @brief:  马达进行过流检测模式的过流检测值
 *          当前值为通过短路测试得出
 */
#define MSG_OC_CHECK_OC_VALUE           0x03

/**
 * @brief:  马达模式8的过流检测补偿值
 *          当前值为通过短路测试得出
 */
#define MSG_MODE8_OC_ADD_VALUE          0x03

/**
 * @brief:  马达在点动模式下进行过流检测的过流检测值
 *          当前值为通过短路测试得出
 */
#define MSG_POINT_OC_VALUE              0x03

/**
 * @brief:  各个模式下，马达过流检测阈值设置
 *          通过进行短路测试得出
 */
static uint8_t msg_oc_value[] = {
    0x06,
    0x04,
    0x06,
    0x06,
    0x03,
    0x06,
    0x04,
    0x03,
    0x06,
    0x06,
};
#endif

/**
 * @brief:  当芯片电压为3.3V时，需对以下参数进行设置，一般情况下保持默认值即可!
 */
#if MSG_OC_VALUE_FOR_3V3
/**
 * @brief:  马达进行过流检测模式的过流检测值
 *          当前值为通过短路测试得出
 */
#define MSG_OC_CHECK_OC_VALUE           0x04

/**
 * @brief:  马达模式8的过流检测补偿值
 *          当前值为通过短路测试得出
 */
#define MSG_MODE8_OC_ADD_VALUE          0x04

/**
 * @brief:  马达在点动模式下进行过流检测的过流检测值
 *          当前值为通过短路测试得出
 */
#define MSG_POINT_OC_VALUE              0x04

/**
 * @brief:  各个模式下，马达过流检测阈值设置
 *          通过进行短路测试得出
 */
static uint8_t msg_oc_value[] = {
    0x07,
    0x05,
    0x06,
    0x08,
    0x04,
    0x07,
    0x05,
    0x04,
    0x07,
    0x07,
};
#endif
#endif
/**************************************** 进阶配置，一般情况下保持默认配置即可 ****************************************/

/**************************************** 专用配置，当前方案需要采用，请根据项目需求进行配置 ****************************************/
#if MSG_STRE_CONTROL
/**
 * @brief:  马达振动强度设置，若当前项目要求需要强度变化控制时，可对此进行设置，若不需要则保持默认设置即可
 *          强度1的意思是马达一周期内高电平的时间为：(14 / 28) * ( 28 * 0.25) = 3.5(ms)
 *          即强度1的意思是在一个周期内马达工作的时间为3.5毫秒，其他强度的计算可根据上面的公式计算得出
 */
static uint8_t msg_stre[] = {
	0,
	14,
	15,
	16,
	17,
	18,
	19,
	20,
	21,
	23,
	24
};
#endif

#if MSG_MODE2_ADJUSTABLE_SPEED
/**
 * @brief:  该设置为模式2内状态切换时间
 *          可根据项目要求更改（目前为HX01项目独有设置）
 */
static uint32_t mode2_sw_type_time[] = {
    600,
    400,
    100,
    400
};
#endif

#if MSG_MODE10_ADJUSTABLE_STRE
/**
 * @brief:  该设置为模式10内强度变化
 *          可根据项目要求更改（目前为HX01项目独有设置）
 */
static uint8_t mode10_sw_intensity[] = {
	14,
	15,
	16,
	17,
	18,
	19,
	20,
	21,
	23,
	24,
	23,
	21,
	20,
	19,
	18,
	17,
	16,
	15,
	14
};
#endif
/**************************************** 专用配置，当前方案需要采用，请根据项目需求进行配置 ****************************************/

/**************************************** 基础配置，可根据项目需求进行更改 ****************************************/
/**
 * @brief:  各个模式内状态自动切换时间，可设置
 *          若模式不够，可视项目要求增加，没使用到的模式保持默认设置即可(1000等于1s)。
 */
static uint32_t mode_sw_time[] = {
	1000,										
	500,
	500,
	250,
	200,
	200,
	200,
	200,
	200,
	600
};
/**************************************** 基础配置，可根据项目需求进行更改 ****************************************/

/**************************************** MASSAGE_CFG ****************************************/

#endif /* ifndef MASSAGE_CFG_H_ */
